Parallelism is the preferable way to increase computer processing speed. One early form of parallelism was the Single-Instruction Multiple-Data (SIMD) architecture, in which the same program is applied to separate sets of data at the same time. SIMD architecture generally has a fast throughput because once an instruction has been read from memory, it can be applied to several sets of different data, and the computer can spread over more calculations the cost of reading the instruction from memory. SIMD computing has limited applicability however, because it requires that each of the different sets of data be processed in the same way. While this may not be a concern where a single algorithm can be applied to different data representing different parts of a problem, most problems cannot be solved effectively with SIMD architecture.
Another design, known as the "Harvard architecture," provides one memory for instructions and a separate memory for data. Each of the memories has its own data path to the CPU, allowing the CPU to obtain twice as much information per unit of time. The extra paths, however, greatly increase the number of connections in the computer, and thus correspondingly increase its cost. Moreover, the design presumes a fixed ratio between data size and program size, thus limiting the computer's use when either the program or the data grow too large to fit into its dedicated memory.
Another way to achieve the effects of parallelism is by means of pipelining, where a process is divided into separate phases, and separate hardware is provided for each phase of the operation. As each phase completes its work, the problem is passed on to different hardware which performs the next operation. Thus, instead of data being held in one set of hardware registers throughout an operation, as in a conventional system, the data is passed through many sets of registers, each dedicated to a different function. A pipeline processor can run very fast as long as information is available in a steady stream, but it may have latency and data flushing problems at the beginning and end of each problem.
Most parallel processor computers available today use a Multiple-Instructions Multiple-Data (MIMD) architecture. An MIMD machine has separate programs working on separate sets of data at the same time, and may have many separate CPUs, each with its own instructions and each processing its own data. The separate CPUs are interconnected so that they can cooperate to solve a problem.
It is difficult in an MIMD machine to provide a means for coordinating the activities of the several separate processors so that they can work on problems simultaneously. As more and more CPU's are added to the system, the overhead caused by interaction between them increases.
The problems discussed above provide particular difficulty when operating an "expert system," which can contain thousands of "rules" which add new facts to the databases. When a rule adds a new fact to the database the rule is said to have "inferred" the new fact, and rules interpreters are thus referred to as "inference engines." A rule in an expert system is generally expressed in the form "IF &lt;condition&gt;, THEN &lt;action&gt;," and takes the "action" when all of its "conditions" are satisfied.
There is no explicit control structure in an expert system to decide when a rule takes its action. In principle, when a new fact enters the database, the expert system should scan all of the rules to determine if any of them can take their action. Where there are many rules, this strategy can cause the expert system to run slowly. A new computer system is therefore necessary which can efficiently, quickly and economically run many lines of computer code as needed for a complex expert system.